<?php

namespace app\common;

use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;
use Aliyun\Core\Config;
use Aliyun\Core\DefaultAcsClient;
use Aliyun\Core\Profile\DefaultProfile;
use think\facade\Db;

/**
 * 阿里云短信类
 */
class Alisms
{
    private $config;

    public function __construct()
    {
        $config = Db::name('config_data')->where('config_id',8)->select()->toArray();
        $arr = [];
        foreach ($config as $k => $v) {
            if ($v['code'] != 'id') {
                $arr[$v['code']] = $v['value'];
            }
        }
        $this->config = $arr;
    }


    /**
     * 阿里云发送短信
     * @param $mobile 要发送的手机号
     * @param $code 验证码
     */
    public function ali_sms($mobile,$code){
        $config = $this->config;
        $to = $mobile;
        require_once root_path().'extend/alisms/vendor/autoload.php';
        Config::load(); //加载区域结点配置
        $accessKeyId = $config['accessKeyId'];
        $accessKeySecret = $config['accessKeySecret'];
        $templateParam = ['code'=>$code];
        //短信签名
        $signName = $config['signName'];
        $templateCode = $config['templateCode']; // 注册登录短信验证码模板
        //短信API产品名（短信产品名固定，无需修改）
        $product = "Dysmsapi";
        //短信API产品域名（接口地址固定，无需修改）
        $domain = "dysmsapi.aliyuncs.com";
        //暂时不支持多Region（目前仅支持cn-hangzhou请勿修改）
        $region = "cn-hangzhou";
        // 初始化用户Profile实例
        $profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
        // 增加服务结点
        DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", $product, $domain);
        // 初始化AcsClient用于发起请求
        $acsClient = new DefaultAcsClient($profile);
        // 初始化SendSmsRequest实例用于设置发送短信的参数
        $request = new SendSmsRequest();
        // 必填，设置雉短信接收号码
        $request->setPhoneNumbers($to);
        // 必填，设置签名名称
        $request->setSignName($signName);
        // 必填，设置模板CODE
        $request->setTemplateCode($templateCode);
        // 可选，设置模板参数
        if ($templateParam) {
            $request->setTemplateParam(json_encode($templateParam));
        }
        //发起访问请求
        $acsResponse = $acsClient->getAcsResponse($request);
        //返回请求结果
        $result = json_decode(json_encode($acsResponse), true);
        // 具体返回值参考文档：https://help.aliyun.com/document_detail/55451.html?spm=a2c4g.11186623.6.563.YSe8FK
        // halt($result);
        if($result['Code'] == 'OK'){
            return ['code'=>0,'msg'=>'发送成功'];
        }else{
            return ['code'=>1,'msg'=>'发送失败'];
        }
    }
}